_Pragma("once")

#include <vector>

#include "BasePage.h"
#include "Editor.h"


using BasicEditorVector = std::vector<BasicEditorSharedPtr>;

/**
 * 可编辑的页面基类
 * @author lizb
 */
class EditablePage : public BasePage {
public:
    using super = BasePage;
    using super::super;


    virtual void initEditors() = 0;

    /**
     * 为可编辑单元设置初始值
     * 需要在进入编辑模式 和 初始化的时候调用
     */
    virtual  void setValue() = 0;


    /**
     * 保存修改的参数
     */
    virtual  void saveValue() = 0;


    void paint() override {
        if (focus) {
            activeEditting->paint();
        }
    }


    int onKeyDown(const KeyCode& keyCode) override;
    int onKeyUp(const KeyCode& keyCode) override;
    int onKeySet(const KeyCode& keyCode) override;
    int onKeyEnt(const KeyCode& keyCode) override;
    int onOtherKey(const KeyCode& keyCode) override;

    /**
     * 进入编辑模式
     */
    virtual void setFocus(const bool focus);

    void initialize() override {
        initEditors();
    }

    void resetActiveEditor();

    void cancelEdit();

//    void close() override {
//        currentBlinkIndex = 0;
//        activeEditting = nullptr;
//   }

protected:

    BasicEditorVector editUnits;
    BasicEditorVector* mpeditUnits = &editUnits;

    BasicEditorSharedPtr activeEditting;

    /**
     * 当前可编辑块所在的下标 从0开始
     */
    int mcurrentBlinkIndex = 0;
};



